home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / linktext.zip / LINKTEXT.PAS < prev   
Pascal/Delphi Source File  |  1992-04-29  |  3KB  |  120 lines

  1. PROGRAM LinkText;
  2. USES Crt;
  3. TYPE
  4.   AnyStr = STRING[255];
  5.   LinePtr = ^LineRecType;
  6.   LineRecType = RECORD
  7.                   NextLine : LinePtr;
  8.                   LineField : AnyStr;
  9.                 END;
  10.  
  11. VAR
  12.   TextFile : Text;
  13.   Head : LinePtr;
  14.   Hold : LinePtr;
  15.   Cur : LinePtr;
  16.   FileName : AnyStr;
  17.   Ok : Boolean;
  18.   LineBuf : AnyStr;
  19.   L : Integer;
  20.  
  21.   PROCEDURE LoadFile;
  22.  
  23.   BEGIN
  24.     ClrScr;
  25.     Write('Enter File Name: ');
  26.     ReadLn(Filename);
  27.     Assign(TextFile, FileName);
  28.     {$I-} Reset(TextFile) {$I+} ;
  29.     Ok := (IoResult = 0);
  30.     IF Ok THEN
  31.       BEGIN
  32.         GetMem(Head, 4);
  33.         Head^.NextLine := NIL;
  34.         Hold := Head;
  35.         WHILE NOT Eof(TextFile) DO
  36.           BEGIN
  37.             ReadLn(TextFile, LineBuf);
  38.             GetMem(Cur, Length(LineBuf)+5);
  39.             Hold^.NextLine := Cur;
  40.             Cur^.NextLine := NIL;
  41.             Hold := Cur;
  42.             Cur^.LineField := LineBuf;
  43.           END;
  44.         Close(TextFile);
  45.     END;
  46. END;
  47.  
  48. PROCEDURE DisplayFile;
  49.  
  50. BEGIN
  51.   ClrScr;
  52.   Cur := Head^.NextLine;
  53.   WHILE Cur <> NIL DO
  54.     BEGIN
  55.       WriteLn(Cur^.LineField);
  56.       Cur := Cur^.NextLine;
  57.     END;
  58. END;
  59.  
  60. PROCEDURE DeleteLine(N : Integer);
  61.  
  62. VAR
  63.   Count : Integer;
  64. BEGIN
  65.   Hold := Head;
  66.   Cur := Head^.NextLine;
  67.   Count := 1;
  68.   WHILE (Count < N) AND (Cur <> NIL) DO
  69.     BEGIN
  70.       Hold := Cur;
  71.       Cur := Head^.NextLine;
  72.       Count := Succ(Count);
  73.     END;
  74.   IF (Cur <> NIL) AND (Count = N) THEN
  75.     BEGIN
  76.       Hold^.NextLine := Cur^.NextLine;
  77.       FreeMem(Cur, Length(Cur^.LineField)+5);
  78.     END;
  79. END;
  80.  
  81. PROCEDURE InsertLine(N : Integer; NewStr : AnyStr);
  82.  
  83. VAR
  84.   Count : Integer;
  85.   NewLine : LinePtr;
  86. BEGIN
  87.   Hold := Head;
  88.   Cur := Head^.NextLine;
  89.   Count := 1;
  90.   WHILE (Count < N) AND (Cur <> NIL) DO
  91.     BEGIN
  92.       Hold := Cur;
  93.       Cur := Cur^.NextLine;
  94.       Count := Succ(Count);
  95.     END;
  96.     GetMem(NewLine, Length(NewStr)+5);
  97.     Hold^.NextLine := NewLine;
  98.     NewLine^.NextLine := Cur;
  99.     NewLine^.LineField := NewStr;
  100.   END;
  101.  
  102. BEGIN
  103.   LoadFile;
  104.   IF Ok THEN
  105.     BEGIN
  106.       DisplayFile;
  107.       WriteLn; Write('Enter line number to delete: '); ClrEol;
  108.       ReadLn(L);
  109.       DeleteLine(L);
  110.       DisplayFile;
  111.       WriteLn; Write('Insert string before what line? '); ClrEol;
  112.       ReadLN(L);
  113.       InsertLine(L, 'This string to be inserted before line specified');
  114.       DisplayFile;
  115.     END
  116.   ELSE WriteLn(FileName, 'NOT FOUND');
  117. END.
  118.  
  119.  
  120.